package com.lzxuni.utils;

import java.io.FileOutputStream;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.apache.commons.lang.StringUtils;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.CellStyle;
import org.apache.poi.ss.usermodel.Font;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;


//http://poi.apache.org/spreadsheet/quick-guide.html
/**
 * 
 * <b>功能：</b> excel操作工具类<br>
 * <b>作者：</b>孙志强<br>
 * <b>日期：</b>2017年3月11日 下午12:21:24
 * @version 1.0 <br>
 */
public class ExcelUtil {
	public static <T> void main(String[] args) {
		ExcelUtil testExcel = new ExcelUtil();
		try {
			
			// 测试 导出
			Map<String, List<List<Object>>> ml = new HashMap<String, List<List<Object>>>();
			List<List<Object>> list1 = new ArrayList<List<Object>>();
			List<Object> list = new ArrayList<Object>();
			list.add("zhangsan12312312123123123132");
			list.add("zhangsan1");
			list.add("zhangsan2");
			list.add("zhangsan3123123123123");
			List<Object> list2 = new ArrayList<Object>();
			list2.add("zhangs");
			list2.add("zhangsan11");
			list2.add("zhangsan21");
			list2.add("zhangsan31");
			list1.add(list);
			list1.add(list2);
			ml.put("1", list1);
			Workbook wb=testExcel.writeExcel(ml,null);
			FileOutputStream fileOut = new FileOutputStream("D:/workbookT.xls");
			wb.write(fileOut);
			fileOut.close();
			
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	
	/**
	 * 
	 * <br>
	 * <b>功能：</b>创建excel<br>
	 * <b>作者：</b>肖财高<br>
	 * <b>日期：</b> 2013-5-30 <br>
	 * @param ml
	 * @param suffix
	 * @return
	 */
	public Workbook writeExcel(Map<String, List<List<Object>>> ml,String suffix){
		Workbook wb=null;
		if(ml==null){
			return null;
		}
		if(null!=suffix && suffix.endsWith("xlsx")){
			//xlsx
			wb=new XSSFWorkbook();
		}else{
			wb=new HSSFWorkbook();
			//xls
		}
		for (Map.Entry<String, List<List<Object>>> map : ml.entrySet()) {
			String key=map.getKey();
			Sheet sheet=wb.createSheet(key);
			List<List<Object>> lm=map.getValue();
			for(int i=0;i<lm.size();i++){
				Row row=sheet.createRow(i);
				row.setHeight((short)315);
				List<Object> listCell=lm.get(i);
				int colume=0;
				for (int j = 0; j < listCell.size(); j++) {
					
					Cell cell=row.createCell(colume);
					if(j == 0 && i==0){
						cell.setCellStyle(getStyle(wb, "center"));
					}else{
						cell.setCellStyle(getStyle(wb, "center"));
					}
					if(listCell.get(j) instanceof java.util.Date || listCell.get(j) instanceof java.sql.Date){ //日期转换
						try {
							cell.setCellValue(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(listCell.get(j).toString()));
						} catch (ParseException e) {
							e.printStackTrace();
						}
					}else if(listCell.get(j) instanceof Integer){ //数字转换
						cell.setCellValue((Integer)listCell.get(j));
					}else{
						cell.setCellValue(String.valueOf(listCell.get(j))); //其他转换成String
					}
					sheet.autoSizeColumn(j);//自动调整宽度
					colume++;
				}
			}
		}
		return wb;
	}
	/**
	 * 
	 *<b>功能：</b> 设置单元格样式<br>
	 *<b>作者：</b>孙志强<br>
	 *<b>日期：</b> 2017年3月10日 下午10:37:14 <br>
	 * @param wb
	 * @param horizontal 水平位置，left 居左，right，居右，center 居中
	 * @return
	 */
	private CellStyle getStyle(Workbook wb,String horizontal){
		
		CellStyle cellStyle=wb.createCellStyle();
		
		//cellStyle.setFillPattern(CellStyle.SOLID_FOREGROUND);
		//cellStyle.setFillForegroundColor(new HSSFColor.PALE_BLUE().getIndex());

		cellStyle.setVerticalAlignment(CellStyle.VERTICAL_CENTER);    //设置垂直居中
		if(StringUtils.isEmpty(horizontal)){
			cellStyle.setAlignment(CellStyle.ALIGN_FILL);   //自适应
		}else{
			if(horizontal.equals("left")){
				cellStyle.setAlignment(CellStyle.ALIGN_LEFT);   //设置水平居左  
			}else if(horizontal.equals("right")){
				cellStyle.setAlignment(CellStyle.ALIGN_RIGHT);   //设置水平居右 
			}else{
				cellStyle.setAlignment(CellStyle.ALIGN_CENTER);   //居中 
			}
		}
		Font font = wb.createFont(); //创建字体样式 
		
		font.setBoldweight(Font.BOLDWEIGHT_BOLD); // 字体加粗  
		font.setFontName("微软雅黑");  //设置字体类型  
		font.setFontHeightInPoints((short) 11);    //设置字体大小  
		cellStyle.setFont(font);    //为标题样式设置字体样式
		cellStyle.setBorderBottom(CellStyle.BORDER_THIN); // 下边框  
		cellStyle.setBorderLeft(CellStyle.BORDER_THIN);// 左边框  
		cellStyle.setBorderTop(CellStyle.BORDER_THIN);// 上边框  
		cellStyle.setBorderRight(CellStyle.BORDER_THIN);// 右边框
		return cellStyle ;
	}
}
